#include <iostream>
#include <vector>
#include <algorithm>

// 定义事件监听器接口
class IEventListener {
public:
    // 定义表示事件发生的回调函数
    virtual void onEvent(int eventData) = 0;
};

// 定义事件发生器
class EventGenerator {
private:
    std::vector<IEventListener*> listeners;

public:
    // 添加监听器
    void addListener(IEventListener* listener) {
        listeners.push_back(listener);
    }

    // 移除监听器
    void removeListener(IEventListener* listener) {
        // 从容器中移除 listener
        listeners.erase(std::remove(listeners.begin(), listeners.end(), listener), listeners.end());
    }

    // 触发事件
    void fireEvent(int eventData) {
        // 通知所有监听器
        for (IEventListener* listener : listeners) {
            listener->onEvent(eventData);
        }
    }
};

// 具体的事件监听器
class MyEventListener : public IEventListener {
public:
    // 表示事件发生时的具体行为
    virtual void onEvent(int eventData) override {
        std::cout << "Event occurred with data: " << eventData << std::endl;
    }
};

int main() {
    // 创建事件发生器
    EventGenerator eventGenerator;

    // 创建事件监听器
    MyEventListener myListener;

    // 添加监听器到发生器
    eventGenerator.addListener(&myListener);

    // 触发事件
    eventGenerator.fireEvent(42);

    // 移除监听器
    eventGenerator.removeListener(&myListener);

    return 0;
}